
import 'package:flutter/material.dart';
import 'package:flutter_application_demo/router/router.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'common/custom_loading_widget.dart';

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    ///使用 ScreenUtilInit 实现屏幕适配
    return ScreenUtilInit(
      designSize: const Size(375, 812), // 设计稿尺寸
      minTextAdapt: true,               // 字体也根据宽度比例缩放
      splitScreenMode: true,            // 支持分屏模式下的适配
      builder: (context, child) {
        return GetMaterialApp(
          /// 设置页面切换动画时长为 300ms。
          transitionDuration:  const Duration(milliseconds: 300),
          /// 关闭调试模式下的 banner,右上角的 DEBUG 标签
          debugShowCheckedModeBanner: false,
          /// 应用标题（可选）
          title: 'CryLite App Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,  // 主题色
            // textTheme: Typography.englishLike2021.apply(fontSizeFactor: 1.sp),    // 全局文字大小
            pageTransitionsTheme: const PageTransitionsTheme(builders: { // 页面切换动画
              // Android 默认的页面切换动画，新页面从中间放大进入（Material Design 风格）
              TargetPlatform.android: ZoomPageTransitionsBuilder(),  
              // iOS 默认的页面切换动画 新页面从右侧滑入，支持右滑返回（iOS 原生风格）
              TargetPlatform.iOS: CupertinoPageTransitionsBuilder(), 
              TargetPlatform.ohos: ZoomPageTransitionsBuilder(),     // HarmonyOS 默认的页面切换动画
            }),
              
          ),

          /// 根页面
          home: child != null ? GestureDetector(
            onTap: () {
              // 点击空白区域，关闭键盘
              FocusScopeNode currentFocus = FocusScope.of(context);
              if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
                FocusManager.instance.primaryFocus?.unfocus();
              }
            },
            child: child, // 传入的根页面
          ) : null,

          //page
          getPages: AppRouter.routes, // 路由表
          initialRoute: AppRouter.index, // 初始路由

          /// 初始化 flutter_smart_dialog 插件。
          /// 自定义 loading/toast 的 UI 样式，统一使用 CustomLoadingWidget。
          /// 添加 navigatorObservers，使页面跳转时能自动管理弹窗生命周期（如返回键关闭 dialog）。
          /// “把通用能力交给插件，把 UI 控制权留给自己”
          ///  详见：https://pub.dev/packages/flutter_smart_dialog
          builder: FlutterSmartDialog.init(
            loadingBuilder: (msg) => CustomLoadingWidget(msg: msg),
            notifyStyle: FlutterSmartNotifyStyle(
              successBuilder: (String msg) => CustomLoadingWidget(msg: msg, type: LoadingType.success),
              failureBuilder: (String msg) => CustomLoadingWidget(msg: msg, type: LoadingType.fail),
            )
          ),
          // 添加 navigatorObservers，使页面跳转时能自动管理弹窗生命周期（如返回键关闭 dialog）
          navigatorObservers: [FlutterSmartDialog.observer],
        );
      },
    );
  }
}